package com.bestdreamer.init;

/**
 * 常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中
 * 本质上，调用类并没有直接引用熬定义常量的类，因此并不会触发定义常量的类的初始化
 * 注意：这里指的是将常量存放到了 MyTest2 的常量池中，之后 MyTest2 与 MyParent2 就没有任何关系了
 */
public class MyTest2 {

    public static void main(String[] args) {
        System.out.println(MyParent2.str);
    }
}

/**
 * 助记符：
 * ldc 表示将 int，float 或是 String 类型的常量值从常量池中推送至栈顶
 * bipush 表示将单字节（-128~127）的常量值推送至栈顶
 * sipush 表示将一个短整型常量值（-32768~32767）推送至栈顶
 * iconst_1 表示将 int 类型 1 推送至栈顶（iconst_1 ~ iconst_5）
 *
 */
class MyParent2{

    public static final String str = "hello world";
//    public static String str = "hello world";

    public static final short s = 127;

    public static final int i = 128;

    public static final int m = 1;

    static{
        System.out.println("MyParent2 static block");
    }
}
